2023.6.25 リストと関数copy
リスト型インスタンスを生成し、そのIDをl1に代入
code:python
l2 = l1 # l1が保持しているIDをl2にコピー
print(id(l1), l1)
print(id(l2), l2)
print(id(l10), id(l11), id(l12)) print(id(l20), id(l21), id(l22)) 結果:
code:text
139945560195312 139945560195344 139945560195376
139945560195312 139945560195344 139945560195376
この代入では、l1とl2はまったく同じ対象を指している事に注意。
l2の指すオブジェクトの1番目要素に、新たに生成した整数型インスタンス「-2」のIDを代入
code:python
print(id(l1), l1)
print(id(l2), l2)
print(id(l10), id(l11), id(l12)) print(id(l20), id(l21), id(l22)) 結果:
code:text
139945560195312 139945560195216 139945560195376
139945560195312 139945560195216 139945560195376
l1とl2は同じリスト型インスタンスを指しているので、l1の1番目要素も値が更新されたように見える。]
新たなリスト型インスタンスを生成し、そのIDをl2に代入
code:python
print(id(l1), l1)
print(id(l2), l2)
print(id(l10), id(l11), id(l12)) print(id(l20), id(l21), id(l22)) 結果:
code:text
139945560195312 139945560195216 139945560195376
139945560195312 139945560195344 139945560195376
つまり、l1が指しているものとは別に、新たなインスタンスが生成され、それをl2が指すようになる
関数copyを用いてl1から新たなリスト型インスタンスl3を生成し、そのIDをl2に代入する。
code:python
l3 = l1.copy()
print(id(l1), l1)
print(id(l3), l3)
print(id(l10), id(l11), id(l12)) print(id(l30), id(l31), id(l32)) 結果:
code:text
139945560195312 139945560195216 139945560195376
139945560195312 139945560195216 139945560195376
新たなリスト型インスタンスが生成され、そのIDがl3に代入される。ここまでは予想通りの動作である。
ただし、新たなインスタンスが保持する要素は、はコピー元となったl1が保持する各要素のIDで構成されていることに注意。
この場合、
code:pythton
print(id(l1), l1)
print(id(l3), l3)
とすると、新たな整数型インスタンス「-1」が作られ、そのIDがl3の0番目に格納される。
code:text